<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>range 查询 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'query-dsl-range-query.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-range-query.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-range-query.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/query-dsl-range-query.html" rel="nofollow" target="_blank">../en/query-dsl-range-query.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="query-dsl.html">查询领域特定语言(Query DSL)</a></span>
»
<span class="breadcrumb-link"><a href="term-level-queries.html">词级查询</a></span>
»
<span class="breadcrumb-node">range 查询</span>
</div>
<div class="navheader">
<span class="prev">
<a href="query-dsl-prefix-query.html">« prefix 查询</a>
</span>
<span class="next">
<a href="query-dsl-regexp-query.html">regexp 查询 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="query-dsl-range-query"></a>范围查询 (range query)
</h2>
</div></div></div>

<p>返回包含指定范围内的词项的文档。</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="range-query-ex-request"></a>请求示例
</h3>
</div></div></div>
<p>
下面这个搜索返回 <code class="literal">age</code> 字段包含 <code class="literal">10</code> 到 <code class="literal">20</code> 之间的词项的文档。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "range" : {
            "age" : {
                "gte" : 10,
                "lte" : 20,
                "boost" : 2.0
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/282.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="range-query-top-level-params"></a><code class="literal">range</code>的顶级参数
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">&lt;field&gt;</code>
</span>
</dt>
<dd>
<p>(必需, object) 你想搜索的字段。</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="range-query-field-params"></a><code class="literal">&lt;field&gt;</code>的参数
</h3>
</div></div></div>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">gt</code>
</span>
</dt>
<dd>
(可选) 大于
</dd>
<dt>
<span class="term">
<code class="literal">gte</code>
</span>
</dt>
<dd>
(可选) 大于等于
</dd>
<dt>
<span class="term">
<code class="literal">lt</code>
</span>
</dt>
<dd>
(可选) 小于
</dd>
<dt>
<span class="term">
<code class="literal">lte</code>
</span>
</dt>
<dd>
(可选) 小于等于
</dd>
<dt>
<span class="term">
<code class="literal">format</code>
</span>
</dt>
<dd>
<p>
(可选, string) 用于转换查询中 <code class="literal">date</code> 值的日期格式。
</p>
<p>
默认情况下，Elasticsearch 使用 <code class="literal">&lt;field&gt;</code> 的映射中指定的 <a class="xref" href="mapping-date-format.html" title="格式" rel="nofollow">date <code class="literal">format</code></a>。

它会覆盖该映射中设置的格式。
</p>
<p>
有效的语法请参考 <a class="xref" href="mapping-date-format.html" title="格式" rel="nofollow"><code class="literal">format</code></a>。
</p>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
如果 <code class="literal">format</code> 和 <code class="literal">date</code> 值不完整，Elasticsearch 会用<a href="https://en.wikipedia.org/wiki/Unix_time" class="ulink" target="_top" rel="nofollow">unix 时间</a>的开始时间(即1970年1月1日)替换任何缺少的年、月或日期部分。
</p>
<p>
例如，如果 <code class="literal">format</code> 为 <code class="literal">dd</code>，则 Elasticsearch 会将 <code class="literal">gte</code> 值 <code class="literal">10</code> 转换为<code class="literal">1970-01-10T00:00:00.000Z</code>, 即: 将<code class="literal">"gte": "10"</code> 转换为 <code class="literal">"gte": "1970-01-10T00:00:00.000Z"</code>。
</p>
</div>
</div>
</dd>
</dl>
</div>
<div class="variablelist">
<a id="querying-range-fields"></a>
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">relation</code>
</span>
</dt>
<dd>
<p>(可选, string) 指示范围查询如何匹配 <code class="literal">range</code> 字段的值。有效值有：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">INTERSECTS</code> (默认)
</span>
</dt>
<dd>
匹配范围字段值与查询范围相交的文档。
</dd>
<dt>
<span class="term">
<code class="literal">CONTAINS</code>
</span>
</dt>
<dd>
匹配范围字段值完全包含查询范围的文档。
</dd>
<dt>
<span class="term">
<code class="literal">WITHIN</code>
</span>
</dt>
<dd>
匹配范围字段值完全在查询范围内的文档。
</dd>
</dl>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">time_zone</code>
</span>
</dt>
<dd>
<p>(可选, string) <a href="https://en.wikipedia.org/wiki/List_of_UTC_time_offsets" class="ulink" target="_top" rel="nofollow">协调世界时(UTC)时差</a>或 <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones" class="ulink" target="_top" rel="nofollow">IANA时区</a>，用于将查询字符串中的 <code class="literal">date</code> 值转换为 UTC。
</p>
<p>
有效值包括 ISO 8601 UTC 时差，如 <code class="literal">+01:00</code> 或 <code class="literal">-08:00</code>，以及 IANA 时区识别名称，如 <code class="literal">America/Los_Angeles</code>。
</p>
<p>
有关使用 <code class="literal">time_zone</code> 参数的查询示例，请参阅范围<a class="xref" href="query-dsl-range-query.html#range-query-time-zone" title="Example query using time_zone parameter"><code class="literal">range</code>查询中的时区</a>。
</p>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>
<code class="literal">time_zone</code> 参数<span class="strong strong"><strong>不</strong></span>影响 <code class="literal">now</code> 的 <a class="xref" href="common-options.html#date-math" title="Date Math" rel="nofollow">日期计算</a>值。

<code class="literal">now</code> 始终是 UTC 中的当前系统时间。

但是，<code class="literal">time_zone</code> 参数会对使用<code class="literal">now</code> 和 <a class="xref" href="common-options.html#date-math" title="Date Math" rel="nofollow">日期计算舍入</a> 计算的日期进行转换。

例如，<code class="literal">time_zone</code> 参数会将 <code class="literal">now/d</code> 的值进行转换。
</p>
</div>
</div>
</dd>
<dt>
<span class="term">
<code class="literal">boost</code>
</span>
</dt>
<dd>
<p>(可选, float) 用于降低或增加查询的<a class="xref" href="query-filter-context.html#relevance-scores" title="相关性评分">相关性评分</a>的浮点数。默认为 <code class="literal">1.0</code>。</p>
<p>
你可以使用 <code class="literal">boost</code> 参数来调整包含两个或更多查询的搜索的相关性评分。
</p>
<p>
<code class="literal">boost</code> 值是相对于默认值 <code class="literal">1.0</code> 的。
其值在 <code class="literal">0</code> 和 <code class="literal">1.0</code> 之间时会降低相关性评分，而大于 <code class="literal">1.0</code> 时会增加相关性评分。
</p>
</dd>
</dl>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="range-query-notes"></a>注意
</h3>
</div></div></div>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="ranges-on-text-and-keyword"></a>在<code class="literal">text</code>和<code class="literal">keyword</code>类型的字段上使用<code class="literal">range</code>查询
</h4>
</div></div></div>
<p>
如果 <a class="xref" href="query-dsl.html#query-dsl-allow-expensive-queries"><code class="literal">search.allow_expensive_queries</code></a> 设置为 <code class="literal">fasle</code>，则在 <code class="literal">text</code> 或 <code class="literal">keyword</code> 类型的字段上的范围查询不会被执行。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="ranges-on-dates"></a>在<code class="literal">date</code>类型的字段上使用<code class="literal">range</code>查询
</h4>
</div></div></div>
<p>
当<code class="literal">&lt;field&gt;</code>参数是一个<a class="xref" href="date.html" title="Date datatype"><code class="literal">date</code></a>类型的字段时，可以将<a class="xref" href="common-options.html#date-math" title="日期计算" rel="nofollow">日期计算</a>与以下参数一起使用:
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">gt</code>
</li>
<li class="listitem">
<code class="literal">gte</code>
</li>
<li class="listitem">
<code class="literal">lt</code>
</li>
<li class="listitem">
<code class="literal">lte</code>
</li>
</ul>
</div>
<p>
例如，下面这个搜索返回<code class="literal">timestamp</code>字段包含今天(now)和昨天(now-1d)之间的日期的文档。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
    "query": {
        "range" : {
            "timestamp" : {
                "gte" : "now-1d/d",
                "lt" :  "now/d"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/283.console"></div>
<div class="section">
<div class="titlepage"><div><div>
<h5 class="title">
<a id="range-query-date-math-rounding"></a>日期计算及舍入
</h5>
</div></div></div>
<p>Elasticsearch 对参数中的<a class="xref" href="common-options.html#date-math" title="Date Math">日期计算</a>的值进行舍入，如下所示：</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">gt</code>
</span>
</dt>
<dd>
<p>向上舍入到舍入日期未涵盖的第一个毫秒。</p>
<p>例如，<code class="literal">2014-11-18||/M</code> 舍入到<code class="literal">2014-12-01T00:00:00.000</code>，不包括整个11月。</p>
</dd>
<dt>
<span class="term">
<code class="literal">gte</code>
</span>
</dt>
<dd>
<p>向下舍入到第一个毫秒。</p>
<p>例如，<code class="literal">2014-11-18||/M</code> 向下舍入到 <code class="literal">2014-11-01T00:00:00.000</code>，包含了整个月。</p>
</dd>
<dt>
<span class="term">
<code class="literal">lt</code>
</span>
</dt>
<dd>
<p>向下舍入到舍入值之前的最后一毫秒。</p>
<p>例如，<code class="literal">2014-11-18||/M</code> 向下舍入到 <code class="literal">2014-10-31T23:59:59.999</code>，不包括整个11月。</p>
</dd>
<dt>
<span class="term">
<code class="literal">lte</code>
</span>
</dt>
<dd>
<p>舍入到舍入间隔中最近的一毫秒。</p>
<p>例如，<code class="literal">2014-11-18||/M</code> 向上舍入到 <code class="literal">2014-11-30T23:59:59.999</code>，包含整个月。</p>
</dd>
</dl>
</div>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="range-query-time-zone"></a>使用<code class="literal">time_zone</code>参数的查询示例
</h4>
</div></div></div>
<p>可以使用 <code class="literal">time_zone</code>参数通过 UTC 时差将 <code class="literal">date</code> 值转换为UTC。例如：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /_search
{
  "query": {
    "range": {
      "timestamp": {
        "time_zone": "+01:00",        <a id="CO63-1"></a><i class="conum" data-value="1"></i>
        "gte": "2020-01-01T00:00:00", <a id="CO63-2"></a><i class="conum" data-value="2"></i>
        "lte": "now"                  <a id="CO63-3"></a><i class="conum" data-value="3"></i>
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/284.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO63-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>指示<code class="literal">date</code>值使用<code class="literal">+01:00</code>的UTC时差。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO63-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>使用 UTC 时差<code class="literal">+01:00</code>，Elasticsearch 将此日期转换为 
<code class="literal">2019-12-31T23:00:00 UTC</code>。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO63-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>参数 <code class="literal">time_zone</code> 不会影响 <code class="literal">now</code> 的值。</p>
</td>
</tr>
</table>
</div>
</div>

</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="query-dsl-prefix-query.html">« prefix 查询</a>
</span>
<span class="next">
<a href="query-dsl-regexp-query.html">regexp 查询 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>